package negocios;

/**
 * Classe que implementa o sistema de chat do Sistema I'm Here.
 * 
 * @author Jonathan Brilhante
 * @author Jose Rafael
 * @author Nata Venancio
 * @author Renato Almeida
 * 
 * @version 2.0
 */

public class Chat {
	private static final String ENDL = System.getProperty("line.separator");
	private Usuario usuario1;
	private Usuario usuario2;
	private String texto1;
	private String texto2;
	private String chat;

	/**
	 * Cria um chat entre dois usuarios
	 * 
	 * @param usuario1
	 *            o primeiro usuario
	 * @param usuario2
	 *            o segundo usuario
	 */
	public Chat(Usuario usuario1, Usuario usuario2) {
		this.usuario1 = usuario1;
		this.usuario2 = usuario2;
		texto1 = texto2 = chat = "";
	}

	/**
	 * Envia uma mensagem para um destinatario
	 * 
	 * @param destinatario
	 *            o destinatario da mensagem
	 * @param texto
	 *            o texto da mensagem
	 */
	public void enviarMensagem(Usuario destinatario, String texto) {
		if (destinatario.equals(usuario1)) {
			chat += getPrefixo(usuario2) + texto + ENDL;
			texto1 = texto;
		} else {
			chat += getPrefixo(usuario1) + texto + ENDL;
			texto2 = texto;
		}
	}

	/**
	 * Recebe a ultima mensagem enviada pelo remetente
	 * 
	 * @param remetente
	 *            o remetente da mensagem
	 * @return a ultima mensagem
	 */
	public String receberMensagem(Usuario remetente) {
		if (remetente.equals(usuario1)) {
			return texto2;
		} else {
			return texto1;
		}
	}

	/**
	 * Retorna o chat completo
	 * 
	 * @return o chat completo, na forma de String
	 */
	public String getChat() {
		return chat;
	}

	/**
	 * Retorna um dos usuarios
	 * 
	 * @return um dos usuarios da conversa
	 */
	public Usuario getUsuario1() {
		return usuario1;
	}

	/**
	 * Retorna um dos usuarios
	 * 
	 * @return um dos usuarios da conversa
	 */
	public Usuario getUsuario2() {
		return usuario2;
	}

	/**
	 * Responde se um chat e igual a outro
	 * 
	 * @return true, se os dois usuarios forem iguais e false, caso contrario
	 */
	public boolean equals(Object outro) {
		if (!(outro instanceof Chat)) {
			return false;
		}
		Chat o = (Chat) outro;
		return usuario1.equals(o.usuario1) && usuario2.equals(o.usuario2);
	}

	/**
	 * Retorn o prefixo da mensagem no chat
	 * 
	 * @param us
	 *            o remetente da mensagem
	 * @return o prefixo da mensagem
	 */
	private String getPrefixo(Usuario us) {
		return us.getLogin() + ": ";
	}
}